import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class A<
		T extends A<
				T,
					S>,
			S extends List<
					?>> {

	T t;
	S s;
	A<
			T,
				S> a;

	Object field = a.<
			T,
				S>getMap(t, s);

	public A() {
		<
				T,
					S>this(null, null);
	}

	public <
			M,
				N> A(M param1, N param2) {

	}

	public <
			M,
				N> Map<
						M,
							N> getMap(M key, N value) {
		return null;
	}

}

class B extends A<
		B,
			List<
					String>> {

	public <
			M,
				N> B(M param1, N param2) {
		<
				M,
					N>super(param1, param2);
	}

	public <
			M,
				N> Map<
						M,
							N> getMap(M key, N value) {
		B b = new <
				M,
					N>B(key, value);
		AMethod method = b::<
				String,
					String>getMap;
		AMethod method2 = super::<
				String,
					String>getMap;
		AMethod method3 = AMap<
				M>::<
						String,
							String>new;
		AMethod method4 = AMap<
				M>::<
						String,
							String>createAMap;
		return super.<
				M,
					N>getMap(key, value);
	}
}

interface AMethod {
	Map<
			String,
				String> getMap(String key, String value);
}

class AMap<
		T> extends HashMap<
				String,
					String> {
	public <
			M,
				N> AMap(String param1, String param2) {

	}

	public static <
			M,
				N> AMap<
						M> createAMap(String param1, String param2) {
		return new AMap<>(param1, param2);
	}
}